การเชื่อมต่อแบบ AWS VPC Peering
ครั้งนี้จะมาแนะนำเกี่ยวกับการเชื่อมต่อแบบ VPC Peering
VPC Peering คืออะไร
VPC Peering เป็นบริการในคลาวด์ของบริษัท Amazon Web Services (AWS) ที่อนุญาตให้เชื่อมต่อเครือข่ายเสมือน (Virtual Private Clouds หรือ VPCs) ระหว่างกัน ซึ่งอยู่ในโซนเดียวกันหรือโซนที่แตกต่างกันในบัญชีเดียวกัน หรือระหว่างบัญชี AWS ที่แยกกันได้ เพื่อให้เครือข่ายภายใน VPC สามารถสื่อสารและแลกเปลี่ยนข้อมูลได้อย่างเป็นส่วนตัวผ่านทางเครือข่ายเสมือน โดยไม่ต้องเชื่อมต่อผ่านอินเทอร์เน็ตสาธารณะ (Public Internet)
เมื่อตั้งค่า VPC Peering แล้ว ทั้งสอง VPC ที่เชื่อมต่อกันจะสามารถสื่อสารกันได้เหมือนเป็นส่วนหนึ่งของเครือข่ายเดียวกัน โดยสามารถส่งและรับข้อมูลได้ผ่านทางเครือข่ายเสมือนที่ถูกเชื่อมต่อกัน เหมือนกับเครือข่ายภายในเดียวกัน ทำให้สามารถเข้าถึงและใช้งานทรัพยากรต่างๆ ใน VPC ปลายทางได้โดยตรง
เป้าหมาย
เราสามารถใช้งาน VPC 2 ตัวในรีเจี้ยนเดียวกันได้ และสามารถเชื่อมต่อ VPC Peering ใน AWS Account อื่นได้
แต่ครั้งนี้จะมาสร้าง VPC 2 ตัวแยกกันในรีเจี้ยน Singapore และ Tokyo ใน AWS Account เดียวกัน
การเชื่อมต่อแบบ VPC Peering
- สามารถเชื่อมต่อกับ AWS Account เดียวกันหรือกับ AWS Account อื่นได้
- สามารถเชื่อมต่อใน Region เดียวกันหรือใน Region อื่นได้
การสร้าง VPC
ดูตัวอย่างการสร้าง VPC ได้ที่ลิงก์บทความด้านล่างนี้ เนื่องจากลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดูตัวอย่างตั้งค่าการสร้าง VPC ในรีเจี้ยน Singapore และ Tokyo ตามหัวข้อด้านล่างนี้ประกอบด้วย
ตัวอย่างตั้งค่าการสร้าง VPC ในรีเจี้ยน Singapore และ Tokyo
สร้าง VPC ในรีเจี้ยน Singapore
เลือกรีเจี้ยน
Singapore
Create VPC
VPC settings
Resources to create:◎ VPC and more
Name tag auto-generation
✅ Auto-generate:tinnakorn-singapore
(เมื่อป้อนชื่อแล้วให้สังเกตการเปลี่ยนแปลงด้านขวา)
IPv4 CIDR block:10.0.0.0/16
(Default)Number of Availability Zones (AZs):
1
Number of public subnets:1
Number of private subnets:0
▼ Customize subnets CIDR blocks (คลิกหัวข้อนี้ก่อนแล้วจะเห็นช่องสำหรับป้อน IP)
Private subnet CIDR block in ap-southeast-1a:10.0.0.0/24
(ตัวอย่าง)DNS options
✅ Enable DNS hostnames
✅ Enable DNS resolutionคลิก
Create VPC
สร้าง VPC ในรีเจี้ยน Tokyo
เลือกรีเจี้ยน
Tokyo
Create VPC
VPC settings
Resources to create:◎ VPC and more
Name tag auto-generation
✅ Auto-generate:tinnakorn-tokyo
(เมื่อป้อนชื่อแล้วให้สังเกตการเปลี่ยนแปลงด้านขวา)
IPv4 CIDR block:10.1.0.0/16
Number of Availability Zones (AZs):
1
Number of public subnets:1
Number of private subnets:0
▼ Customize subnets CIDR blocks (คลิกหัวข้อนี้ก่อนแล้วจะเห็นช่องสำหรับป้อน IP)
Private subnet CIDR block in ap-southeast-1a:10.1.0.0/24
(ตัวอย่าง)DNS options
✅ Enable DNS hostnames
✅ Enable DNS resolutionคลิก
Create VPC
การสร้าง Peering connection
เมื่อสร้าง VPC ใน Singapore และ Tokyo เสร็จแล้ว เราจะมาสร้าง Peering connection กัน
ขั้นตอนนี้ผมเปิดแท็บหน้าจอ Amazon VPC ไว้ 2 แท็บสำหรับรีเจี้ยน Singapore
และ Tokyo
ไว้เพื่อให้การสร้าง Peering connection นั้นง่ายขึ้น
สร้าง Peering connection ในรีเจี้ยน Singapore และ Tokyo
ให้กลับมาที่หน้าจอ VPC ที่เลือกรีเจี้ยน Singapore
แล้วเลือก Peering connections
จากเมนูด้านซ้าย
คลิก Create peering connection
ด้านขวา
เมื่อเข้ามาหน้า Create peering connection แล้วจะทำการตั้งค่าดังนี้
Peering connection settings
Name: tinnakorn-sinagpore-tokyo-peering
Select a local VPC to peer with
VPC ID (Requester): tinnakorn-singapore-vpc
Select another VPC to peer with
Account
เลือก ◎ My account
Region
เลือก ◎ Another Region
เลือก Asia Pacific (Tokyo) (ap-northeast-1)
VPC ID (Accepter)
vpc-xxxxxxxxxxxxxxxxx
(กลับไปที่หน้าจอ Your VPCs ในรีเจี้ยน Tokyo แล้วคัดลอก VPC ID วางที่นี่)
เลื่อนลงมาด้านล่างสุด แล้วคลิก Create peering connection
แล้วคลิกมาที่หน้าจอ Peering connections แล้วดูที่ชื่อของเรา ก็จะแสดง Pending acceptance
แบบนี้
ต่อไปเราต้องทำการ Accept request ในหน้าจอ Peering connections ในรีเจี้ยน Tokyo
ก่อนจึงจะสามารถเชื่อมต่อระหว่างรีเจี้ยน Singapore และ Tokyo ได้
Accept request Peering connection ในรีเจี้ยน Tokyo
เข้าไปหน้าจอ VPC ที่เลือกรีเจี้ยน Tokyo
แล้วเลือก Peering connections
จากเมนูด้านซ้าย
แล้วติ๊ก Peering connection name ของเรา แล้วเลือก Actions
แล้วเลือก Accept request
แล้ว Status จะเปลี่ยนเป็น Provisioning และเปลี่ยนเป็น Active
กลับมาที่หน้าจอ Peering connection ในรีเจี้ยน Singapore อีกครั้ง แล้ว Refresh หน้าจอ จะเห็นว่า Status เปลี่ยนเป็น Active
เช่นเดียวกันกับ Peering connection ในรีเจี้ยน Tokyo
การเพิ่ม Route tables
ขั้นตอนนี้จะทำการเพิ่ม Route tables ในรีเจี้ยน Tokyo และ Singapore
เพิ่ม Route tables ในรีเจี้ยน Tokyo
ไปที่หน้าจอ VPC ที่เป็นรีเจี้ยน Tokyo แล้วเลือก Route tables
จากเมนูด้านซ้าย
ติ๊กที่ Route table Name ของเรา แล้วจะมีข้อมูลแสดงขึ้นมาจากด้านล่าง แล้วเลือกแท็บ Routes
แล้วคลิก Edit routes
คลิก Add route
แล้วจะมีช่องให้ป้อนข้อมูลเพิ่มขึ้นมา ให้ป้อนป้อนดังนี้
・Destination: ป้อน IPv4 CIDR ของรีเจี้ยน Singapore
เช่น 10.0.0.0/16
・Target: คลิกที่ช่องแล้วเลือก Peering Connection
แล้วเลือก Peering connection ID ที่สร้างก่อนหน้านี้ เช่น pcx-xxxxxxxxxx
(Peering connection ID นี้มีการซิงค์กันระหว่างรีเจี้ยน Tokyo และ Singapore)
จากนั้นให้คลิก Save changes
แล้วเลื่อนลงมาด้านล่างที่แท็บ Routes จะเห็นว่า Destination 10.0.0.0/16
(Singapore) มี Status เป็น Active
เพิ่ม Route tables ในรีเจี้ยน Singapore
วิธีการทำจะเหมือนกับขั้นตอนที่แล้วเลย แต่สำหรับการเพิ่ม Route tables ในรีเจี้ยน Singapore ให้ป้อนค่าดังนี้
・Destination: ป้อน IPv4 CIDR ของรีเจี้ยน Tokyo
เช่น 10.1.0.0/16
・Target: คลิกที่ช่องแล้วเลือก Peering Connection
แล้วเลือก Peering connection ID ที่สร้างก่อนหน้านี้ เช่น pcx-xxxxxxxxxx
(Peering connection ID นี้มีการซิงค์กันระหว่างรีเจี้ยน Tokyo และ Singapore)
จากนั้นให้คลิก Save changes
แล้วเลื่อนลงมาด้านล่างที่แท็บ Routes จะเห็นว่า Destination 10.1.0.0/16
(Tokyo) มี Status เป็น Active
การสร้าง EC2 Instance
ดูตัวอย่างการสร้าง Amazon Linux 2 ได้ที่ลิงก์บทความด้านล่างนี้ เนื่องจากลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดูตัวอย่างตั้งค่าการสร้าง Amazon Linux 2 ใน EC2 ในรีเจี้ยน Singapore และ Tokyo ตามหัวข้อด้านล่างนี้ประกอบด้วย
ตัวอย่างตั้งค่าการสร้าง Amazon Linux 2 ใน EC2 ในรีเจี้ยน Singapore และ Tokyo
ก่อนอื่นให้สร้าง IAM Role เพื่อให้สิทธิ์ SSM กับ EC2
รายละเอียดเกี่ยวกับการเชื่อมต่อ EC2 ด้วย SSM ดูได้ที่ลิงก์บทความนี้
การสร้าง IAM Role
เข้ามาที่ Service IAM แล้วค้นหา ?︎ IAM
แล้วเลือก IAM
Step 1 - Select trusted entity:
Trusted entity type
» เลือก AWS service
Use case
» เลือก ◉ EC2
» คลิก Next
Step 2 - Add permissions:
» ค้นหา Permissions policies: AmazonSSMManagedInstanceCore
» ติ๊ก ✅
AmazonSSMManagedInstanceCore
» คลิก Next
Step 3 - Name, review, and create:
» Name: ec2-ssm-managed-instance-core
(ชื่ออะไรก็ได้)
» เลื่อนลงมาด้านล่างสุด คลิก Create role
สร้าง EC2 Instance ในรีเจี้ยน Singapore
ตัวอย่างตั้งค่าการสร้าง Amazon Linux 2 ใน EC2 ในรีเจี้ยน Singapore ของบทความครั้งนี้
※Launch instances
Name and tags
Name:tinnakorn-singapore-test
(ตั้งชื่อที่ต้องการ)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 AMI
Instance type
Instance type:t3a.nano
(เลือกสเปคตามต้องการ)Key pair (login)
Key pair name - required:Proceed without a key pair (Not recommended)
(ครั้งนี้จะไม่ใช้ Key pair)Network settings
VPC - required:tinnakorn-singapore-vpc
(เลือก VPC ที่สร้างก่อนหน้านี้)
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP:Enable
Firewall (security groups)
Security group name - required:tinnakorn-singapore-test
(ตั้งชื่อที่ต้องการ)
Description - required:tinnakorn-singapore-test
(ป้อนตามต้องการ)
Inbound security groups rules
คลิกRemove
(ครั้งนี้จะไม่ตั้งค่า Security group rule)Configure storage
1x:8
GiBgp2
Root volume (Default)คลิก
Advanced details
เพื่อขยายหน้าจอ แล้วเลือก Role ที่เราสร้างไว้ก่อนหน้านี้
IAM instance profile:ec2-ssm-managed-instance-core
สร้าง EC2 Instance ในรีเจี้ยน Tokyo
ตัวอย่างตั้งค่าการสร้าง Amazon Linux 2 ใน EC2 ในรีเจี้ยน Tokyo ของบทความครั้งนี้
※Launch instances
Name and tags
Name:tinnakorn-tokyo-test
(ตั้งชื่อที่ต้องการ)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 AMI
Instance type
Instance type:t3a.nano
(เลือกสเปคตามต้องการ)Key pair (login)
Key pair name - required:Proceed without a key pair (Not recommended)
(ครั้งนี้จะไม่ใช้ Key pair)Network settings
VPC - required:tinnakorn-tokyo-vpc
(เลือก VPC ที่สร้างก่อนหน้านี้)
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP:Disable
Firewall (security groups)
Security group name - required:tinnakorn-tokyo-test
(ตั้งชื่อที่ต้องการ)
Description - required:tinnakorn-tokyo-test
(ป้อนตามต้องการ)
Inbound security groups rules
▼ Security group rule 1 (xxx, xxx, xx.x.x.x/xx)
Type:All Traffic
| Source type:Custom
| Source:10.0.0.0/16
▼ Advanced network configuration
Primary IP:10.1.0.100
Configure storage
1x:8
GiBgp2
Root volume (Default)
ตรวจสอบการเชื่อมต่อ
เข้าไปที่หน้าจอ EC2 Instance ของ Singapore แล้วคลิก Connect
เลือกแท็บ Session Manager
แล้วคลิก Connect
เมื่อเข้ามาที่หน้าจอ AWS Terminal แล้ว รันคำสั่ง ping ตามนี้เพื่อตรวจสอบสถานะการเชื่อมต่อถึงกันของ EC2 Instance ในรีเจี้ยน Singapore และ Tokyo
ping 10.1.0.100
Output (example): จะเห็นว่า EC2 Instance ในรีเจี้ยน Singapore และ Tokyo สามารถสื่อสารกันได้
AWS Terminal
sh-5.2$ ping 10.1.0.100
PING 10.1.0.100 (10.1.0.100) 56(84) bytes of data.
64 bytes from 10.1.0.100: icmp_seq=1 ttl=127 time=70.3 ms
64 bytes from 10.1.0.100: icmp_seq=2 ttl=127 time=70.4 ms
64 bytes from 10.1.0.100: icmp_seq=3 ttl=127 time=70.4 ms
64 bytes from 10.1.0.100: icmp_seq=4 ttl=127 time=70.3 ms
64 bytes from 10.1.0.100: icmp_seq=5 ttl=127 time=70.7 ms
...
พิสูจน์ว่าจะไม่สามารถเชื่อมต่อได้เมื่อไม่มี Peering Connection
อยากจะพิสูจน์ว่าเมื่อไม่มี Peering Connection จะไม่สามารถ ping ได้ ดังนั้นจะลบ Peering Connection ออก
ให้เข้าไปที่หน้าจอ Peering connections ในรีเจี้ยน Singapore แล้วติ๊ก Peering connection Name ที่ต้องการลบ แล้วคลิก Actions
แล้วเลือก Delete peering connection
เมื่อมี POPUP แสดงขึ้นมา ให้เลือก Delete related route table entries
แล้วป้อน delete
ลงในช่องตามคำแนะนำ แล้วคลิก Delete
เมื่อ Status แสดงเป็น Deleting
ให้กลับไปที่หน้าจอ AWS Terminal
หลังจากที่ลบ Peering connection แล้ว จะเห็นว่า ping หยุดดำเนินการที่ icmp_seq=91
(ping จะหยุดดำเนินการหลังจากที่เราลบ Peering connection ทันที)
Output (example)
AWS Terminal
sh-5.2$ ping 10.1.0.100
PING 10.1.0.100 (10.1.0.100) 56(84) bytes of data.
64 bytes from 10.1.0.100: icmp_seq=1 ttl=127 time=70.3 ms
64 bytes from 10.1.0.100: icmp_seq=2 ttl=127 time=70.4 ms
64 bytes from 10.1.0.100: icmp_seq=3 ttl=127 time=70.4 ms
64 bytes from 10.1.0.100: icmp_seq=4 ttl=127 time=70.3 ms
64 bytes from 10.1.0.100: icmp_seq=5 ttl=127 time=70.7 ms
...
64 bytes from 10.1.0.100: icmp_seq=87 ttl=127 time=74.9 ms
64 bytes from 10.1.0.100: icmp_seq=88 ttl=127 time=74.9 ms
64 bytes from 10.1.0.100: icmp_seq=89 ttl=127 time=74.9 ms
64 bytes from 10.1.0.100: icmp_seq=90 ttl=127 time=75.0 ms
64 bytes from 10.1.0.100: icmp_seq=91 ttl=127 time=74.9 ms
จากนั้นให้เข้าไปที่หน้าจอ Peering connections ในรีเจี้ยน Tokyo จะเห็นว่า Status แสดงเป็น Deleting
เช่นเดียวกับในรีเจี้ยน Singapore
การลบ AWS Resource ที่สร้างขึ้นในบทความนี้
การลบฟังก์ชันใน Service ต่างๆ ถ้าเราไม่รู้ลำดับของการลบฟังก์ชันก็จะทำให้เกิด Error ในขณะลบ หรือไม่สามารถลบได้นั่นเอง เช่น ถ้าทำการลบ Security Group ที่กำลังเชื่อมต่ออยู่กับ EC2 โดยที่ไม่ Terminate EC2 ก่อน ก็จะไม่สามารถลบ Security Group ได้ เป็นต้น ดังนั้นแนะนำให้ลบตามขั้นตอนที่ผมเรียงไว้ได้เลยครับ
การลบฟังก์ชันที่ได้สร้างขึ้นใน Service ต่างๆ
ลบเรียงตามขั้นตอนดังนี้:
- Amazon EC2 (ลบในรีเจี้ยน Singapore และ Tokyo)
- Instance
- Amazon VPC (ลบในรีเจี้ยน Singapore และ Tokyo)
- Your VPCs
- VPC Peering Connection
- AWS Identity and Access Management (IAM)
- Roles
การลบฟังก์ชันใน Amazon EC2
ให้ลบฟังก์ชัน Instance ทั้งในรีเจี้ยน Singapore และ Tokyo ดังนี้
ลบ Instance ในรีเจี้ยน Singapore
เข้าไปที่หน้าจอฟังก์ชัน Instance ในรีเจี้ยน Singapore
แล้วค้นหาชื่อที่ต้องการลบ แล้วเลือก Instance state
แล้วเลือก Terminate instance
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ (การ Terminate Instance ต้องรอจนกว่า Instance state เป็น Terminated
จึงจะเสร็จสมบูรณ์)
ลบ Instance ในรีเจี้ยน Tokyo
เข้าไปที่หน้าจอฟังก์ชัน Instance ในรีเจี้ยน Tokyo
แล้วค้นหาชื่อที่ต้องการลบ แล้วเลือก Instance state
แล้วเลือก Terminate instance
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ (การ Terminate Instance ต้องรอจนกว่า Instance state เป็น Terminated
จึงจะเสร็จสมบูรณ์)
การลบฟังก์ชันใน VPC
ให้ลบฟังก์ชัน Your VPCs ทั้งในรีเจี้ยน Singapore และ Tokyo ดังนี้
ข้อควรระวัง: ก่อนลบ Your VPCs ในรีเจี้ยน Singapore และ Tokyo เราต้องลบ
Peering connection
ก่อน จึงจะสามารถลบ Your VPCs ได้
แต่เนื่องจากตอนทำหัวข้อ ตรวจสอบการเชื่อมต่อ เราได้ทำการลบ Peering connection ไปแล้ว ดังนั้นเราจึงสามารถลบ Your VPCs ตามหัวข้อด้านล่างนี้ได้เลย
ลบ Your VPCs ในรีเจี้ยน Singapore
เข้าไปที่หน้าจอฟังก์ชัน Your VPCs ในรีเจี้ยน Singapore
แล้วค้นหาชื่อที่ต้องการลบ แล้วเลือก Actions
แล้วเลือก Delete VPC
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
ลบ Your VPCs ในรีเจี้ยน Tokyo
เข้าไปที่หน้าจอฟังก์ชัน Your VPCs ในรีเจี้ยน Tokyo
แล้วค้นหาชื่อที่ต้องการลบ แล้วเลือก Actions
แล้วเลือก Delete VPC
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
การลบฟังก์ชันใน AWS Identity and Access Management (IAM)
ให้ลบฟังก์ชัน Role ซึ่งการลบในส่วนนี้สามารถลบได้โดยไม่ต้องคำนึงถึงรีเจี้ยน เพราะบริการ AWS Identity and Access Management (IAM) อยู่ใน Global infrastructure ที่เป็น Region ทั่วโลกที่ AWS ทำงานอยู่
เข้าไปที่หน้าจอฟังก์ชัน Role แล้วค้นหาชื่อที่ต้องการลบ แล้วเลือก Delete
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
Pricing
การสร้าง VPC Peering Connection ไม่มีค่าใช้จ่าย แต่มีค่าใช้จ่ายในการเชื่อมต่อ ค่าใช้จ่ายในการเชื่อมต่อสื่อสารระหว่าง VPC และการเชื่อมต่อสื่อสารระหว่าง Region มีราคาเท่ากัน โดยรายละเอียดเป็นไปตามด้านล่างนี้
- VPC Peering Connection ภายใน AZ เดียวกัน: ไม่มีค่าใช้จ่าย
- VPC Peering Connection ระหว่าง AZ: $0.01/GB (ทั้งข้อมูลขาเข้าและออก) โดยหากทำ VPC Peering ภายใน Account เดียวกัน ค่าใช้จ่ายจะเกิดขึ้นทั้งข้อมูลขาเข้าและขาออก หรือก็คือ $0.02/GB
- VPC Peering Connection ระหว่าง Region: ข้อมูลขาเข้าไม่มีค่าใช้จ่าย ส่วนข้อมูลขาออก $0.09/GB
สรุป
การเชื่อมต่อแบบ VPC Peering สามารถนำไปใช้กับ EC2 Instance ที่สร้างในรีเจี้ยนที่แตกต่างกันได้ เช่น กรณีที่สร้าง EC2 Instance ในรีเจี้ยน Singapore และ Tokyo ก็สามารถสร้าง VPC สำหรับใช้กับ EC2 Instance ทั้งในรีเจี้ยน Singapore และ Tokyo และใช้ฟังก์ชัน Peering connection ใน VPC เพิ่มเติมเพื่อให้ EC2 Instance ในรีเจี้ยน Singapore และ Tokyo สามารถเชื่อมต่อกันได้
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ